package com.frogs.ucenter.service;

import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import com.frogs.ucenter.entity.UserBaseAccountInfo;

public interface UserService {

	/**
	 * 获取用户基础信息
	 * @param userId
	 * @return
	 */
	JSONObject getUserBaseInfoForJson(Integer userId) throws Exception;
	
	/**
	 * 校验用户基础信息是否完善
	 * @param userId
	 * @return
	 */
	JSONObject checkUserBaseInfo(Integer userId) throws Exception;
	
	/**
	 * 获取用户基础信息
	 * @param userId
	 * @return
	 */
	Map<String,Object> getUserBaseInfoForMap(Integer userId) throws Exception;

	/**
	 * 修改用户基础信息
	 * @param userId
	 * @return
	 */
	JSONObject updateUserBaseInfo(Map<String,Object> userBaseInfo) throws Exception;

	/**
	 * 注册
	 * 
	 * @param accountName
	 * @param email
	 * @param phone
	 * @param passwd
	 * @param confirmPasswd
	 * @param expandCode
	 * @return
	 */
	JSONObject register(String userName, String nickName, String passwd,
			String confirmPasswd, String ip, String expandCode, Integer applicablePlatformId) throws Exception;

	/**
	 * 登录
	 * 
	 * @param accountName
	 * @param email
	 * @param phone
	 * @param passwd
	 * @return
	 */
	JSONObject login(String userName, String passwd, String ip) throws Exception;

	/**
	 * 获取用户信息
	 * 
	 * @param userId
	 * @param verify
	 * @return
	 */
	UserBaseAccountInfo getUser(Integer userId) throws Exception;

	/**
	 * 是否登录
	 * 
	 * @param userId
	 * @param verify
	 * @return
	 */
	Boolean islogin(Integer userId, String userIp) throws Exception;

	/**
	 * 退出
	 * 
	 * @param userId
	 * @return
	 */
	Boolean logout(Integer userId) throws Exception;

	/**
	 * 更新密码
	 * 
	 * @param userId
	 * @param oldPasswd
	 * @param passwd
	 * @param confirmPasswd
	 * @return
	 */
	JSONObject updatePasswd(Integer userId, String oldPasswd, String passwd, String confirmPasswd, String ip) throws Exception;

	/**
	 * 检测用户名是否可用<br>
	 * true-可用，false-不可用
	 * 
	 * @param accountName
	 * @return
	 */
	Boolean verifyName(String accountName) throws Exception;

	/**
	 * 检测邮箱是否可用<br>
	 * true-可用，false-不可用
	 * 
	 * @param email
	 * @return
	 */
	Boolean verifyEmail(String email) throws Exception;
	
	/**
	 * 检测手机号码是否可用<br>
	 * true-可用，false-不可用
	 * 
	 * @param phone
	 * @return
	 */
	Boolean verifyPhone(String phone) throws Exception;

	/**
	 * 忘记密码<br>
	 * 根据用户输入的用户名、邮箱和手机号码检测是否存在，返回用户的相关信息
	 * 
	 * @param accountName
	 * @param email
	 * @param phone
	 * @return
	 */
	JSONObject findPwd(String accountName, String email, String phone, String ip) throws Exception;

	/**
	 * 发送找回密码的邮箱
	 * 
	 * @param userId
	 * @param email
	 * @param key
	 * @return
	 */
	boolean sendEmailPwd(Integer userId, String email) throws Exception;

	/**
	 * 重置密码
	 * 
	 * @param userId
	 * @param key
	 * @param password
	 * @return
	 */
	boolean resetPasswd(String userId, String key, String password, String confirmPasswd, String ip) throws Exception;
	
	/**
	 * 绑定邮箱
	 * @param userId
	 * @param email
	 * @return
	 */
	JSONObject bindEmail(Integer userId, String email, String ip);
	
	/**
	 * 绑定邮箱
	 * @param userId
	 * @param email
	 * @return
	 */
	JSONObject unbindEmail(Integer userId, String email);
	
	/**
	 * 绑定手机
	 * @param userId
	 * @param phone
	 * @param code
	 * @param verify
	 * @return
	 */
	JSONObject bindPhone(Integer userId, String phone, String ip);
	
	/**
	 * 解绑手机
	 * @param userId
	 * @param phone
	 * @param code
	 * @param verify
	 * @return
	 */
	JSONObject unbindPhone(Integer userId, String phone);

	/**
	 * 根据手机号码重置密码
	 * 
	 * @param userId
	 * @param phone
	 * @param key
	 * @param password
	 * @param confirmPasswd
	 * @return
	 */
	boolean resetPasswdByPhone(String userId, String phone, String key, String password,
			String confirmPasswd, String ip);

	/**
	 * 手机动态密码登录
	 * 
	 * @param username
	 * @param dynamicPassword
	 * @param ip
	 * @return
	 */
	JSONObject loginByDynamicPassword(String username, String dynamicPassword, String ip, Integer applicablePlatformId);

	/**
	 * 发送手机动态密码
	 * 
	 * @param username
	 * @param ip
	 * @return
	 */
	boolean sendDynamicPaswordByPhone(String username, String ip);

	/**
	 * 判断该账户是否绑定手机号码<br>
	 * true-已绑定，false-未绑定
	 * @param username
	 * @return
	 */
	boolean isBindPhoneByUsername(String username);
	
}
